public class LongestCommonPrefix {
    public String longestCommonPrefix(String[] strs) {
        // 解法一: 两两比较
        String ret = strs[0];
        for(int i = 1; i < strs.length; i++) {
            ret = findCommonPrefix(ret, strs[i]);
        }
        return ret;
    }

    public String findCommonPrefix(String s1, String s2) {
        int i = 0;
        while(i < Math.min(s1.length(), s2.length()) && s1.charAt(i) == s2.charAt(i)) {
            // 要么 i 越界了, 要么 i 下标指向的两个字符不相同
            // 不相同则 i 前面的就是公共前缀
            i++;
        }
        return s1.substring(0, i);
    }

    // 统一比较
    public String longestCommonPre1fix(String[] strs) {
        for(int i = 0; i < strs[0].length(); i++) {
            // 从第一个字符串中拿取字符和后面的字符串进行统一对比
            char ch = strs[0].charAt(i);
            for(int j = 1; j < strs.length; j++) {
                // 从第二个字符串开始统一对比
                if(i >= strs[j].length() || ch != strs[j].charAt(i)) {
                    return strs[0].substring(0, i);
                }
            }
        }
        // 如果全部遍历完了, 走到这里, 说明整个字符串都属于最长公共前缀, 返回任意字符串数组里面的字符串即可
        return strs[0];
    }
}
